Skip to main content

Les Handlers

Les handlers Ansible permettent de notifier et d'exécuter des actions en fonction de l'état d'une tâche. Par exemple, si une tâche provoque une modification, comme la modification d'une configuration Apache, alors vous redémarrez le service concerné.

Les handlers se définissent au niveau d'un rôle dans un répertoire nommé "handlers" par convention. Le fichier principal main.yml contient alors une liste de tâches Ansible identifiées par leur name. Il s'agit généralement de tâches de redémarrage de service, comme par exemple :

---
- name: restart apache
ansible.builtin.systemd_service:
name: apache2
state: restarted

L'identifiant de cette tâche "restart apache" doit ensuite être notifié lors de la description de la tâche dans tasks/main.yml :

---
- name: copy security.conf
ansible.builtin.copy:
src: security.conf
dest: /etc/apache2/conf-available/security.conf
notify: restart apache

C'est la ligne notify qui déclenchera le handler nommé "restart apache" uniquement si le fichier security.conf est modifié. Les notifications sont traitées à la fin de l'exécution du playbook de manière optimisée. Par exemple, si deux actions nécessitent un redémarrage d'Apache, alors un seul handler "restart apache" sera exécuté.

Nginx avec Ansible et Handlers

Voici un exemple concret d'utilisation des handlers avec Nginx dans Ansible :

/ansible/playbooks/roles/nginx/tasks/main.yml :

---
- name: Install Nginx
ansible.builtin.apt:
name: nginx
state: present
update_cache: yes

- name: Copy statik web
ansible.builtin.copy:
src: docusaurus
dest: /var/www/html/
notify: restart nginx

- name: Copy nginx setting
ansible.builtin.copy:
src: docusaurus-nginx-web
dest: /etc/nginx/sites-available/

- name: Create symlink
ansible.builtin.file:
src: /etc/nginx/sites-available/docusaurus-nginx-web
dest: /etc/nginx/sites-enabled/default
state: link
notify: restart nginx

/ansible/playbooks/roles/nginx/handlers/main.yml :

---
- name: restart nginx
ansible.builtin.systemd_service:
name: nginx
state: restarted
enabled: yes

Cet exemple montre comment utiliser les handlers pour redémarrer le service Nginx lors de la modification de la configuration.

N'oubliez pas d'ajuster les noms de fichiers et les chemins en fonction de votre configuration.